package org.esky.spring.ioc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * spring容器创建bean的生命周期
 * 
 * @author Jack.Xu
 * @ClassName: BeanLifecycle
 * @Description: TODO
 * @author: Jack.Xu
 * @date: 2014年3月5日 下午4:55:37
 */
public class BeanLifecycle {

	private ApplicationContext context;

	@Test
	public void test() {
		context = new ClassPathXmlApplicationContext( new String[] { "applicationContext.xml" });

		/**
		 * Spring容器管理生成的bean默认为单实例的
		 * 
		 * 测试两次获取的对象是否是同一个 取决于<bean>标签的scope属性
		 * 如果其值设定为prototype,则表示每次都创建一个新的bean实例
		 */
		Simple s1 = (Simple) context.getBean("withScope");
		Simple s2 = (Simple) context.getBean("withScope");
		
		Simple s3 = (Simple) context.getBean("noScope");
		Simple s4 = (Simple) context.getBean("noScope");
		/**
		 * 当设定<bean>标签的scope属性为prototype时,输出结果为：false,表示创建的对象是不同的
		 * 否则为true,则表示两个对象相同
		 */
		System.out.println(s1 == s2);
		System.out.println(s3 == s4);
	}
}
